﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.DL.DALC.SAPC.Proxy;
using CROSLAND.BL.BE;

namespace CROSLAND.DL.DALC.SAPC
{
    public class ReclamoDALC : IReclamoDALC
    {
       const string nl = "\r\n";

       public static ReclamoDALC Instance() {
            if (_instance == null)
            {
                lock (typeof(ReclamoDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new ReclamoDALC();
                    }
                }
            }
            return _instance;
        }

        private ReclamoDALC() { }

        private static volatile ReclamoDALC _instance = null;
        
        public GenericBE set_Reclamo(DocReclamoBE pObjReclamo)
        {
            GenericBE rpta = null;
            try
            {
                //variables
                ReclamosProxy proxy = new ReclamosProxy();
                VBKAVBTable T_Fxvbka = new VBKAVBTable(); //Contactos
                VBPAVBTable T_Fxvbpa = new VBPAVBTable(); //Interlocutor
                VBUKVBTable T_Fxvbuk = new VBUKVBTable(); //Status cabecera y datos gestión
                BAPIRET2Table T_Return = new BAPIRET2Table();
                ZWEB_RECLAMOSTable T_Z_Reclamos = new ZWEB_RECLAMOSTable();
                ZWEB_TEXTOS_RECLAMOTable T_textos = new ZWEB_TEXTOS_RECLAMOTable();
                //*******************************************************************
                /* 
                  RHuapaya 06.03.2012
                 */

                //*******************************************************************
                rpta = new GenericBE();

                //implementacion
                /*_Z_Reclamo = new ZReclamoBE();
                _DocComercial = new DocComercialReclamoBE();
                _Interlocutor = new List<InterlocutorReclamoBE>();
                _Contactos = new ContactosReclamoBE();*/
                
                //contactos
                if (!(pObjReclamo.Contactos == null))
                {
                    VBKAVB c = new VBKAVB();
                    
                    c.Erdat = ParametroDALC.dateNetToSap(pObjReclamo.Contactos.ERDAT);
                    c.Erzet = pObjReclamo.Contactos.ERZET;
                    c.Ernam = pObjReclamo.Contactos.ERNAM;
                    c.Aedat = "";
                    c.Aezet = "";
                    c.Aenam = "";
                    c.Ktaar = pObjReclamo.Contactos.KTAAR;
                    c.Vbtyp = pObjReclamo.Contactos.VBTYP;
                    c.Trvog = pObjReclamo.Contactos.TRVOG;
                    c.Vkorg = pObjReclamo.Contactos.VKORG;
                    c.Vtweg = pObjReclamo.Contactos.VTWEG;
                    c.Spart = pObjReclamo.Contactos.SPART;
                    c.Vkbur = pObjReclamo.Contactos.VKBUR;
                    c.Vkgrp = pObjReclamo.Contactos.VKGRP;
                    c.Ktabg = ParametroDALC.dateNetToSap(pObjReclamo.Contactos.KTABG);
                    c.Ktaen = ParametroDALC.dateNetToSap(pObjReclamo.Contactos.KTAEN);
                    c.Ktabt = pObjReclamo.Contactos.KTABT;
                    c.Ktaet = pObjReclamo.Contactos.KTAET;
                    c.Ktagr = pObjReclamo.Contactos.KTAGR;
                    c.Ktast = pObjReclamo.Contactos.KTAST;
                    c.Ktaer = pObjReclamo.Contactos.KTAER;
                    c.Ktafk = pObjReclamo.Contactos.KTAFK;
                    c.Ktext = pObjReclamo.Contactos.KTEXT;
                    c.Kunnr = pObjReclamo.Contactos.KUNNR;
                    c.Gbstk = pObjReclamo.Contactos.GBSTK;
                    c.Parvw = pObjReclamo.Contactos.PARVW;
                    c.Direction = pObjReclamo.Contactos.DIRECTION;
                    c.Ktext_Mc = pObjReclamo.Contactos.KTEXT_MC;
                    c.Ktext_Mc_Langu = pObjReclamo.Contactos.KTEXT_MC_LANGU;
                    c.Vgbel = pObjReclamo.Contactos.VGBEL.PadLeft(10,'0');
                    c.Updkz = "I";
                    c.Ktaeb = pObjReclamo.Contactos.KTAEB; 
                    T_Fxvbka.Add(c);
                }
                //Doc Comercial
                if (!(pObjReclamo.DocComercial == null))
                {
                    VBUKVB d = new VBUKVB();
                    d.Gbstk = pObjReclamo.DocComercial.GBSTK;
                    d.Uvall	= pObjReclamo.DocComercial.UVALL;
                    d.Vbtyp	= pObjReclamo.DocComercial.VBTYP;
                    d.Vbobj = pObjReclamo.DocComercial.VBOBJ;
                    d.Updkz = "I";
                    T_Fxvbuk.Add(d);
                }
                //ZWEB_Reclamo
                if (!(pObjReclamo.Z_Reclamo == null))
                {
                    ZWEB_RECLAMOS z = new ZWEB_RECLAMOS();
                    z.Matnr = pObjReclamo.Z_Reclamo.MATNR;
                    z.Matn2 = pObjReclamo.Z_Reclamo.MATNR2;
                    z.Recla = pObjReclamo.Z_Reclamo.RECLA.Equals("") ? "" : pObjReclamo.Z_Reclamo.RECLA.PadLeft(10, '0');
                    z.Stat1 = pObjReclamo.Z_Reclamo.STAT1;
                    z.User1 = pObjReclamo.Z_Reclamo.USER1;
                    z.Cmm1 = pObjReclamo.Z_Reclamo.CMM1;
                    z.Stat2 = pObjReclamo.Z_Reclamo.STAT2;
                    z.User2 = pObjReclamo.Z_Reclamo.USER2;
                    z.Cmm2 = pObjReclamo.Z_Reclamo.CMM2;
                    z.Stat3 = pObjReclamo.Z_Reclamo.STAT3;
                    z.User3 = pObjReclamo.Z_Reclamo.USER3;
                    z.Cmm3 = pObjReclamo.Z_Reclamo.CMM3;
                    z.Fcha1 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA1);
                    z.Fcha2 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA2);
                    z.Fcha3 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA3);
                    //se adicionó el stat4 con codig 9 - rhuapaya
                    z.Stat4 = pObjReclamo.Z_Reclamo.STAT4;
                    z.User4 = pObjReclamo.Z_Reclamo.USER4;
                    z.Cmm4 = pObjReclamo.Z_Reclamo.CMM4;
                    z.Fcha4 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA4);
                    //*******************************************************************
                    z.Cpostal = pObjReclamo.Z_Reclamo.CPOSTAL;
                    z.Direccion = pObjReclamo.Z_Reclamo.DIRECCION;
                    z.Nif = pObjReclamo.Z_Reclamo.NIF;
                    z.Pcontacto = pObjReclamo.Z_Reclamo.PCONTACTO;
                    z.Telefono = pObjReclamo.Z_Reclamo.TELEFONO;
                    T_Z_Reclamos.Add(z);
                }
                //Interlocutor
                foreach (InterlocutorReclamoBE i in pObjReclamo.Interlocutor)
                {
                    VBPAVB it = new VBPAVB();
                    it.Vbeln    = "$000000001";
                    it.Posnr	= i.POSNR;
                    it.Parvw	= i.PARVW;
                    it.Kunnr	= i.KUNNR;
                    it.Pernr	= i.PERNR;
                    it.Parnr	= i.PARNR;
                    it.Adrnr	= i.ADRNR;

                    //AG
                    if (i.PARVW.Equals("AG"))
                    {
                        
                        it.Adrnr = "AG $00001";
                        it.Land1 = i.Land1;
                        it.Adrda = "E";
                        it.Xcpdk = "X"; //falta pasar
                        it.Parvw_Ff = "X";
                        it.Name1 = i.Name1;
                        
                        it.Nrart = "KU";
                        it.Fehgr = "07";
                        it.Spras = "S";
                        it.Telfx = i.Telefono;
                        //xvbadr
                        it.J_1kftbus = i.Direccion;
                        it.J_1kfrepre = i.Ciudad; //ort01
                        it.Stkzn = "1"; //ADDRESS_TYPE
                        it.Reflogsys = i.CodPostal; // PSTLZ
                        it.Hityp = "X"; // indica que es eventual
                        it.Ablad = i.Mail;
                        it.Stceg = i.NIF;
                        //-------------------------------------------
                        
                    }
                    
                    //------------------------
                    it.Updkz	= "I";

                    T_Fxvbpa.Add(it);
                }
                //verifico que el largo de los textos no sea mayor a 90 caracteres.
                //verifico que el largo de los textos no sea mayor a 90 caracteres.
                int posSpace = 0;
                string texto = "";
                int contInicio = 0;
                foreach (TextoBE tb in pObjReclamo.Texto)
                {
                    posSpace = 0;
                    contInicio = 0;
                    texto = "";
                    posSpace = (tb.Descripcion.Length / 80);
                    if (posSpace * 80 <= tb.Descripcion.Length) { posSpace++; }
                    posSpace--;
                    if (tb.Descripcion.Length > 130)
                    {
                        for (int cont = 1; cont <= posSpace; cont++)
                        {
                            if (!tb.Descripcion.Substring(cont * 80, 1).Equals("\r\n") &&
                                !tb.Descripcion.Substring(cont * 79, 1).Equals("\r\n"))
                            {
                                tb.Descripcion = tb.Descripcion.Insert(cont * 80, "\r\n");
                            }

                        }
                        
                    }
                }
                foreach (TextoBE tb in pObjReclamo.Texto)
                {
                    //sdfsdfsdfdsf|qqqqqqqqqqqqqqqq|nrrrrrrrrrrrrrrrrr|tttttttttttttt
                    int k = tb.Descripcion.Length;
                    tb.Descripcion = tb.Descripcion.Replace(Environment.NewLine, "|") + "|";
                    if (tb.Descripcion.Length > 0)
                      if (tb.Descripcion.IndexOf("|",0)>0)
                          for (int i = 0, j = 0; tb.Descripcion.IndexOf("|", 0) >= 0; )
                        {
                            ZWEB_TEXTOS_RECLAMO t = new ZWEB_TEXTOS_RECLAMO();
                            
                            i = tb.Descripcion.IndexOf("|",j);
                            t.Fid = tb.CodTexto;
                            t.Tdline = tb.Descripcion.Substring(0,i);
                            tb.Descripcion = tb.Descripcion.Substring(i + 1);
                            T_textos.Add(t);
                            i++;
                            //j = i;
                        }
                }

                //
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                //ref VBKAVBTable T_Fxvbka, ref VBPAVBTable T_Fxvbpa, ref VBUKVBTable T_Fxvbuk, ref BAPIRET2Table T_Return, ref ZWEB_RECLAMOSTable T_Z_Reclamos
                proxy.Zweb_Crea_Reclamos(ref T_Fxvbka, ref  T_Fxvbpa, ref  T_Fxvbuk, ref  T_Return,ref T_textos, ref  T_Z_Reclamos);
                rpta.Descripcion = string.Empty;
                foreach (BAPIRET2 r in T_Return)
                {
                    if (r.Type.Equals("S"))
                    {
                        rpta.Codigo = "S";
                        rpta.Descripcion = r.Message.Trim() + ".";
                        break;
                    }
                    else
                    {
                        rpta.Codigo = r.Type;
                        rpta.Descripcion = rpta.Descripcion + ", " + r.Message + ".";
                    }
                }
            }
            catch (Exception e)
            {
                rpta = null;
            }
            
                return rpta;
            
        }

        private List<GenericBE> getDatos_Combo(ZWEB_COMBOTable pTabla) {
            List<GenericBE> rpt = null;
            try
            {
                rpt = new List<GenericBE>();

                foreach (ZWEB_COMBO z in pTabla)
                {
                    GenericBE g = new GenericBE();

                    g.Codigo = z.Id_Elemento;
                    g.Descripcion = z.Id_Elemento + "::" + z.N_Elemento;

                    rpt.Add(g);
                }

            }
            catch { 
            }

            return rpt;
        }

        private List<JustificaionBE> getDatos_ComboCas(ZWEB_COMBOTable pTabla)
        {
            List<JustificaionBE> rpt = null;
            try
            {
                rpt = new List<JustificaionBE>();
                foreach (ZWEB_COMBO z in pTabla)
                {
                    JustificaionBE j = new JustificaionBE();
                    j.Codigo = z.Id_Elemento;
                    j.Descripcion = z.Id_Elemento + " :: " + z.N_Elemento;
                    j.CodDep = z.Id_Dependiente;
                    rpt.Add(j);
                }

            }
            catch
            {
            }

            return rpt;
        }
        
        public CombosReclamoBE getCombosReclamo() { 
            CombosReclamoBE rpta = null;
            try
            {
                //variables
                ReclamosProxy proxy = new ReclamosProxy();
                ZWEB_COMBOTable T_Motivo = new ZWEB_COMBOTable();      
                ZWEB_COMBOTable T_Resultado = new ZWEB_COMBOTable();      
                BAPIRET2Table T_Return = new BAPIRET2Table();      
                ZWEB_COMBOTable T_Sector = new ZWEB_COMBOTable();      
                ZWEB_COMBOTable T_Status = new ZWEB_COMBOTable();
                ZWEB_COMBOTable T_Vendedores = new ZWEB_COMBOTable();
                ZWEB_COMBOTable T_Justi = new ZWEB_COMBOTable();
                rpta = new CombosReclamoBE();
                //desarrollo         
               
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                proxy.Zweb_Combos_Reclamo(ref T_Justi,ref T_Motivo, ref T_Resultado, 
                                    ref T_Return, ref T_Sector, 
                                    ref T_Status, ref  T_Vendedores);

                rpta.T_MOTIVO = getDatos_Combo(T_Motivo);
                rpta.T_RESULTADO = getDatos_Combo(T_Resultado);
                rpta.T_SECTOR = getDatos_Combo(T_Sector);
                rpta.T_STATUS = getDatos_Combo(T_Status);
                rpta.T_VENDEDORES = getDatos_ComboCas(T_Vendedores);
                rpta.T_Justi = getDatos_ComboCas(T_Justi);


            }catch(Exception e){
                rpta = null;
            }
            return  rpta;
        }

        public List<InterlocutorReclamoBE> getInterXEmpresa(string P_Cliente, string P_Contac, string P_Respon, string P_Vkorg, string P_Vtweg,string P_AD)
        {
            List<InterlocutorReclamoBE> rpta = null;
            try
            {
                //variables
                ReclamosProxy proxy = new ReclamosProxy();
                ZWEB_INTER_RECLAMOTable T_Interlocutores = new ZWEB_INTER_RECLAMOTable();
                rpta = new List<InterlocutorReclamoBE>();
                string nif = string.Empty;
                //desarrollo                
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                proxy.Zweb_Busca_Interlocutor(P_AD, P_Cliente.Trim().PadLeft(10, '0'), P_Contac.Trim().PadLeft(10, '0'),
                                              P_Respon.Trim().PadLeft(8, '0'), P_Vkorg, P_Vtweg, ref T_Interlocutores);

                foreach(ZWEB_INTER_RECLAMO z in T_Interlocutores)
                {
                    InterlocutorReclamoBE i = new InterlocutorReclamoBE();
                    i.PARVW = z.Parvw;
                    i.POSNR = "000000";
                    i.Calle = z.Street;
                    i.NOMBRE = z.Nombre;
                    i.Direccion = z.Street;
                    i.Ciudad = z.City;
                    i.CodPostal = z.Postl_Code;
                    i.ADRNR = z.Adrnr;
                    i.Telefono = z.Telephone;
                    i.Mail = z.E_Mail;

                    if (z.Parvw.Equals("AG"))
                    {
                        
                        if (P_Cliente.Trim('0').Equals(z.Kunnr.Trim('0')))
                        {
                            i.KUNNR = z.Kunnr.PadLeft(10, '0');
                            i.EsVentual = false;
                        }
                        else if (z.Kunnr.Trim().Equals("X"))
                        {
                            //i.KUNNR = z.Kunnr.PadLeft(10, '0');
                            i.KUNNR = z.Stcd1.PadLeft(10, '0');
                            
                            i.EsVentual = true;
                        }

                    }
                    if (z.Parvw.Equals("WE"))
                    {
                        i.KUNNR = z.Kunnr.PadLeft(10, '0');
                        nif = z.Stcd1;
                    }
                    else if (z.Parvw.Equals("AP"))
                    {
                        i.PARNR = z.Kunnr.PadLeft(10, '0');
                        i.NIF = z.Stcd1;
                    }
                    else if (z.Parvw.Equals("VE") || z.Parvw.Equals("ZM"))
                        i.PERNR = z.Kunnr.PadLeft(8, '0');
                    
                    rpta.Add(i);
                }
                if (rpta.Find(X => X.PARVW.Equals("AG"))!=null)
                {
                    rpta.Find(X => X.PARVW.Equals("AG")).NIF = nif;                
                }

            }
            catch (Exception e)
            {
                rpta = null;
            }
            return rpta;
        
        }

        public List<ReporteReclamoBE> getReporteReclamo(string P_NREC, string P_PEDV, string P_KUNNR, string P_NCLIE, string P_MATNR, DateTime P_FECINI
                                                , DateTime P_FECFIN, string P_USUARIO, DateTime P_FECINI_CON_I, DateTime P_FECINI_CON_F,
                                                  DateTime P_FECFIN_CON_I, DateTime P_FECFIN_CON_F, string ESTADO)
        {
                //variables
                ReclamosProxy proxy = new ReclamosProxy();
                List<ReporteReclamoBE> rpta = new List<ReporteReclamoBE>();
                ZWEB_LST_RECLAMOTable T_Lista_Reclamos = new ZWEB_LST_RECLAMOTable(); 
                BAPIRET2Table T_Return = new BAPIRET2Table();
                //desarrollo         
                try
                {
                    proxy.Connection = DALC.getConnection;
                    try
                    {
                        if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                    }
                    catch
                    {
                        throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                    }
                    P_KUNNR = P_KUNNR.Equals("") ? "*" : P_KUNNR;
                    P_MATNR = P_MATNR.Equals("") ? "*" : P_MATNR;
                    P_NCLIE = P_NCLIE.Equals("") ? "*" : "*" + P_NCLIE + "*";
                    P_NREC = P_NREC.Equals("") ? "*" : P_NREC.PadLeft(10, '0');
                    P_PEDV = P_PEDV.Equals("") ? "*" : P_PEDV.PadLeft(10, '0');
                    P_USUARIO = P_USUARIO.Equals("") ? "*" : P_USUARIO;
                    proxy.Zweb_Busca_Reclamos(P_FECFIN.Equals(DateTime.Parse("01/01/1900")) ? string.Empty: ParametroDALC.dateNetToSap(P_FECFIN),
                                            P_FECFIN_CON_F.Equals(DateTime.Parse("01/01/1900")) ? string.Empty:ParametroDALC.dateNetToSap(P_FECFIN_CON_F), 
                                            P_FECFIN_CON_I.Equals(DateTime.Parse("01/01/1900")) ? string.Empty:ParametroDALC.dateNetToSap(P_FECFIN_CON_I), 
                                            P_FECINI.Equals(DateTime.Parse("01/01/1900")) ? string.Empty:ParametroDALC.dateNetToSap(P_FECINI),
                                            P_FECINI_CON_F.Equals(DateTime.Parse("01/01/1900")) ? string.Empty:ParametroDALC.dateNetToSap(P_FECINI_CON_F),
                                            P_FECINI_CON_I.Equals(DateTime.Parse("01/01/1900")) ? string.Empty : ParametroDALC.dateNetToSap(P_FECINI_CON_I), 
                                            P_KUNNR, P_MATNR, P_NCLIE, P_NREC, P_PEDV, P_USUARIO, ref  T_Lista_Reclamos,
                                            ref  T_Return);

                    foreach (ZWEB_LST_RECLAMO z in T_Lista_Reclamos)
                    {
                        ReporteReclamoBE r = new ReporteReclamoBE();
                        r.VBELN = z.Vbeln;
                        r.KTABG = ParametroDALC.dateSapToNet(z.Ktabg).ToShortDateString();
                        r.KUNNR = z.Kunnr;
                        r.NAME1 = z.Name1;
                        r.MATNR = z.Matnr.Trim('0');
                        r.MAKTX = z.Maktx.Trim('0');
                        r.VGBEL = z.Vgbel;
                        r.STAT = z.Stat;

                        rpta.Add(r);
                    }
                    P_MATNR = P_MATNR.Trim('0');
                    if (!P_MATNR.Equals("*"))
                    {
                        rpta.RemoveAll(x => !P_MATNR.Equals(x.MATNR.Trim('0').Trim()));
                        //int i = 0;
                        //foreach (ReporteReclamoBE r in rpta)
                        //{
                        //    if (!r.MATNR.Equals(P_MATNR.Trim('0')))
                        //      rpta.RemoveAt(i);

                        //    i++;
                        //}
                    }
                }
                catch (Exception e)
                {
                    rpta = null;
                }
                return rpta;
        }
        public List<GenericBE> getDatosImpr(string pPedido, string pMat1, string pMat2, string pRef)
        {
            List<GenericBE> rpta = null;

            try
            {
                ReclamosProxy proxy = new ReclamosProxy();
                BAPIRET2Table T_Return = new BAPIRET2Table();
                rpta = new List<GenericBE>();
                //desarrollo         

                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                proxy.Zweb_Valida_Datos_Reclamo(pMat1.PadLeft(18, '0'), pMat2.PadLeft(18, '0'), pPedido.PadLeft(10, '0'), pRef, ref T_Return);

                foreach (BAPIRET2 r in T_Return)
                {
                    GenericBE g = new GenericBE();
                    g.Descripcion = "Invalido";
                    g.Codigo = r.Type;
                    if (r.Type.Equals("p") && !r.Message.Equals(""))
                    {
                        g.Descripcion = r.Message;
                    }
                    else if (r.Type.Equals("1") && !r.Message.Equals(""))
                    {
                        g.Codigo = "m" + r.Type;
                        g.Descripcion = r.Message;
                    }
                    else if (r.Type.Equals("2") && !r.Message.Equals(""))
                    {
                        g.Codigo = "m" + r.Type;
                        g.Descripcion = r.Message;
                    }
                    rpta.Add(g);
                }
            }
            catch (Exception e)
            {
                rpta = null;
            }
            return rpta;
        }
        

        public List<GenericBE> getValidaData(string pPedido, string pMat1, string pMat2, string pRef)
        {
            List<GenericBE> rpta = null;

            try
            {
                ReclamosProxy proxy = new ReclamosProxy();
                BAPIRET2Table T_Return = new BAPIRET2Table();
                rpta = new List<GenericBE>();
                //desarrollo         

                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                proxy.Zweb_Valida_Datos_Reclamo(pMat1.PadLeft(18, '0'), pMat2.PadLeft(18, '0'), pPedido.PadLeft(10, '0'), pRef, ref T_Return);

                foreach (BAPIRET2 r in T_Return)
                {
                    GenericBE g = new GenericBE();
                    g.Descripcion = "Invalido";
                    g.Codigo = r.Type;
                    if (r.Type.Equals("p") && !r.Message.Equals(""))
                    {                        
                        g.Descripcion = "Valido";
                    }
                    else if (r.Type.Equals("1") && !r.Message.Equals(""))
                    {
                        g.Codigo = "m" + r.Type;
                        g.Descripcion = "Valido";                  
                    }
                    else if (r.Type.Equals("2") && !r.Message.Equals(""))
                    {
                        g.Codigo = "m" + r.Type;
                        g.Descripcion = "Valido";                  
                    }

                    rpta.Add(g);
                }
                if (rpta.Find( x => x.Codigo.Equals("m1"))==null)
                {
                    GenericBE g1 = new GenericBE();
                    g1.Codigo = "m1";
                    g1.Descripcion = "Invalido";
                    rpta.Add(g1);
                }
                if (rpta.Find(x => x.Codigo.Equals("m2")) == null)
                {
                    GenericBE g2 = new GenericBE();
                    g2.Codigo = "m2";
                    g2.Descripcion = "Invalido";
                    rpta.Add(g2);
                }
            }catch(Exception e){
                rpta = null;
            }
            return rpta;
        }
        
        public DocReclamoBE getReclamo(string pNroReclamo)
        {

            DocReclamoBE rpta = null;
            try
            {
                //variables
                ReclamosProxy proxy = new ReclamosProxy();

                rpta = new DocReclamoBE();
                BAPIRET2Table T_Return = new BAPIRET2Table();
                ZWEB_TEXTOS_RECLAMOTable T_Textos = new ZWEB_TEXTOS_RECLAMOTable();
                VBKATable T_Vbka = new VBKATable();
                VBPATable T_Vbpa = new VBPATable(); 
                VBUKTable T_Vbuk = new VBUKTable(); 
                ZWEB_RECLAMOSTable T_Z_Reclamo = new ZWEB_RECLAMOSTable();
                ZWEB_VISITASTable T_Z_Visitas = new ZWEB_VISITASTable();
                //implementacion

                //
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                proxy.Zweb_Ver_Reclamo(pNroReclamo, ref  T_Return, ref  T_Textos, ref  T_Vbka, ref  T_Vbpa, ref  T_Vbuk, ref T_Z_Visitas, ref T_Z_Reclamo);
                //contactos


                if (T_Vbka.Count > 0)
                {
                        rpta.Contactos.VBELN = T_Vbka[0].Vbeln;
                        rpta.Contactos.ERDAT = ParametroDALC.dateSapToNet(T_Vbka[0].Erdat);
                        rpta.Contactos.ERZET = T_Vbka[0].Erzet.Substring(0, 2) + ":" + T_Vbka[0].Erzet.Substring(2, 2) + ":" + T_Vbka[0].Erzet.Substring(4,2);
                        rpta.Contactos.ERNAM = T_Vbka[0].Ernam;
                        rpta.Contactos.AEDAT = ParametroDALC.dateSapToNet(T_Vbka[0].Aedat);
                        rpta.Contactos.AEZET = T_Vbka[0].Aezet.Substring(0, 2) + ":" + T_Vbka[0].Aezet.Substring(2, 2) + ":" + T_Vbka[0].Aezet.Substring(4, 2);
                        rpta.Contactos.AENAM = T_Vbka[0].Aenam;
                        rpta.Contactos.KTAAR = T_Vbka[0].Ktaar;
                        rpta.Contactos.VBTYP = T_Vbka[0].Vbtyp;
                        rpta.Contactos.TRVOG = T_Vbka[0].Trvog;
                        rpta.Contactos.VKORG = T_Vbka[0].Vkorg;
                        rpta.Contactos.VTWEG = T_Vbka[0].Vtweg;
                        rpta.Contactos.SPART = T_Vbka[0].Spart;
                        rpta.Contactos.VKBUR = T_Vbka[0].Vkbur;
                        rpta.Contactos.VKGRP = T_Vbka[0].Vkgrp;
                        rpta.Contactos.KTABG = ParametroDALC.dateSapToNet(T_Vbka[0].Ktabg);
                        rpta.Contactos.KTAEN = ParametroDALC.dateSapToNet(T_Vbka[0].Ktaen);
                        rpta.Contactos.KTABT = T_Vbka[0].Ktabt.Substring(0, 2) + ":" + T_Vbka[0].Ktabt.Substring(2, 2) + ":" + T_Vbka[0].Ktabt.Substring(4, 2);
                        rpta.Contactos.KTAET = T_Vbka[0].Ktaet.Substring(0, 2) + ":" + T_Vbka[0].Ktaet.Substring(2, 2) + ":" + T_Vbka[0].Ktaet.Substring(4, 2);
                        rpta.Contactos.KTAGR = T_Vbka[0].Ktagr;
                        rpta.Contactos.KTAST = T_Vbka[0].Ktast;
                        rpta.Contactos.KTAER = T_Vbka[0].Ktaer;
                        rpta.Contactos.KTAFK = T_Vbka[0].Ktafk;
                        rpta.Contactos.KTEXT = T_Vbka[0].Ktext;
                        rpta.Contactos.KUNNR = T_Vbka[0].Kunnr;
                        rpta.Contactos.GBSTK = T_Vbka[0].Gbstk;
                        rpta.Contactos.PARVW = T_Vbka[0].Parvw;
                        rpta.Contactos.DIRECTION = T_Vbka[0].Direction;
                        rpta.Contactos.KTEXT_MC = T_Vbka[0].Ktext_Mc;
                        rpta.Contactos.KTEXT_MC_LANGU = T_Vbka[0].Ktext_Mc_Langu;
                        rpta.Contactos.VGBEL = T_Vbka[0].Vgbel;
                        rpta.Contactos.KTAEB = T_Vbka[0].Ktaeb; 
                    }

                //Doc Comercial
                if (T_Vbuk.Count > 0)
                {
                    rpta.DocComercial.GBSTK = T_Vbuk[0].Gbstk;
                    rpta.DocComercial.UVALL = T_Vbuk[0].Uvall;
                    rpta.DocComercial.VBTYP = T_Vbuk[0].Vbtyp;
                    rpta.DocComercial.VBOBJ = T_Vbuk[0].Vbobj;
                    rpta.DocComercial.VBELN = T_Vbuk[0].Vbeln;
                }
                //ZWEB_Reclamo
                if (T_Z_Reclamo.Count > 0)
                {
                    rpta.Z_Reclamo.MATNR = T_Z_Reclamo[0].Matnr;
                    rpta.Z_Reclamo.MATNR2 = T_Z_Reclamo[0].Matn2;
                    rpta.Z_Reclamo.RECLA = T_Z_Reclamo[0].Recla;
                    rpta.Z_Reclamo.STAT1 = T_Z_Reclamo[0].Stat1;
                    rpta.Z_Reclamo.USER1 = T_Z_Reclamo[0].User1;
                    rpta.Z_Reclamo.CMM1 = T_Z_Reclamo[0].Cmm1;
                    rpta.Z_Reclamo.STAT2 = T_Z_Reclamo[0].Stat2;
                    rpta.Z_Reclamo.USER2 = T_Z_Reclamo[0].User2;
                    rpta.Z_Reclamo.CMM2 = T_Z_Reclamo[0].Cmm2;
                    rpta.Z_Reclamo.STAT3 = T_Z_Reclamo[0].Stat3;
                    rpta.Z_Reclamo.USER3 = T_Z_Reclamo[0].User3;
                    rpta.Z_Reclamo.CMM3 = T_Z_Reclamo[0].Cmm3;
                    rpta.Z_Reclamo.VBELN = T_Z_Reclamo[0].Vbeln;

                    rpta.Z_Reclamo.FCHA1 =ParametroDALC.dateSapToNet( T_Z_Reclamo[0].Fcha1);
                    rpta.Z_Reclamo.FCHA2 = ParametroDALC.dateSapToNet(T_Z_Reclamo[0].Fcha2);
                    rpta.Z_Reclamo.FCHA3 = ParametroDALC.dateSapToNet(T_Z_Reclamo[0].Fcha3);
                    //se adicionó el estado 4 con codigo 9 -- rhuapaya
                    rpta.Z_Reclamo.STAT4 = T_Z_Reclamo[0].Stat4;
                    rpta.Z_Reclamo.USER4 = T_Z_Reclamo[0].User4;
                    rpta.Z_Reclamo.CMM4 = T_Z_Reclamo[0].Cmm4;
                    rpta.Z_Reclamo.FCHA4 = ParametroDALC.dateSapToNet(T_Z_Reclamo[0].Fcha4);
                    //****************************************************************************
                    rpta.Z_Reclamo.CPOSTAL = T_Z_Reclamo[0].Cpostal;
                    rpta.Z_Reclamo.PCONTACTO = T_Z_Reclamo[0].Pcontacto;
                    rpta.Z_Reclamo.NIF = T_Z_Reclamo[0].Nif;
                    rpta.Z_Reclamo.TELEFONO = T_Z_Reclamo[0].Telefono;
                    rpta.Z_Reclamo.DIRECCION = T_Z_Reclamo[0].Direccion;
                    
                }
                //Interlocutor
                foreach (VBPA i in T_Vbpa)
                {
                    InterlocutorReclamoBE it = new InterlocutorReclamoBE();
                    it.POSNR = i.Posnr;
                    it.PARVW = i.Parvw;
                    it.KUNNR = i.Kunnr;
                    it.PERNR = i.Pernr;
                    it.PARNR = i.Parnr;
                    it.ADRNR = i.Adrnr;
                    it.VBELN = i.Vbeln;
                    it.Mail  = i.Ablad;
                    it.NIF = i.Stceg;
                    if (i.Parvw.Equals("AP"))
                        it.Cargo = i.Ablad.Equals("") ? i.Knref : "";
                    
                    rpta.Interlocutor.Add(it);
                }
                foreach (ZWEB_TEXTOS_RECLAMO tb in T_Textos)
                {
                    TextoBE t = new TextoBE();
                    string texto = string.Empty;
                    string puntoAparte = "." + Environment.NewLine;
                    if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.Fid)) != null)
                    {
                        t = rpta.Texto.Find(x => x.CodTexto.Equals(tb.Fid));
                    }
                    else
                    {
                        t.CodTexto = tb.Fid;
                    }
                    if (!tb.Tdline.Equals(""))
                    {

                        t.Descripcion += tb.Tdline; //"\r\n" + " "
                        t.Descripcion = t.Descripcion.Trim();
                        if (tb.Tdline.Length < 79 && t.Descripcion.IndexOf(".",t.Descripcion.Length-1)!=-1)
                        {
                            t.Descripcion = t.Descripcion + Environment.NewLine;
                        }
                        if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.Fid)) == null)
                        {
                            rpta.Texto.Add(t);
                        }
                    }
                }
                /* rhuapaya 06.03.2012 
                   se agregó zweb_busca_visitas
                 */
                foreach (ZWEB_VISITAS item in T_Z_Visitas)
                {
                    ZReclamoVisitasBE vi = new ZReclamoVisitasBE();
                    vi.MANDT = item.Mandt;
                    vi.VBELN = item.Vbeln;
                    vi.KTAST = item.Ktast;
                    vi.NROVIS = item.Nrovis;
                    vi.FECHA = ParametroDALC.dateSapToNet(item.Fecha);
                    vi.TIME = item.Hora.Substring(0, 2) + ":" + item.Hora.Substring(2, 2);
                    vi.RESP = item.Resp;
                    vi.COMENT = item.Coment;

                    rpta.Z_ReclamoVisita.Add(vi);
                }
            }
            catch (Exception e)
            {
                rpta =null;
            }

            return rpta;

        }

        public GenericBE set_ModificarReclamo(DocReclamoBE pObjReclamo)
        {
            GenericBE rpta = null;
            try
            {
                //variables
                ReclamosProxy proxy = new ReclamosProxy();
                VBKAVBTable T_Fxvbka = new VBKAVBTable(); //Contactos
                VBPAVBTable T_Fxvbpa = new VBPAVBTable(); //Interlocutor
                VBUKVBTable T_Fxvbuk = new VBUKVBTable(); //Status cabecera y datos gestión
                BAPIRET2Table T_Return = new BAPIRET2Table();
                ZWEB_RECLAMOSTable T_Z_Reclamos = new ZWEB_RECLAMOSTable();
                ZWEB_TEXTOS_RECLAMOTable T_textos = new ZWEB_TEXTOS_RECLAMOTable();
                rpta = new GenericBE();
                string rec = string.Empty;
                //implementacion
                /*_Z_Reclamo = new ZReclamoBE();
                _DocComercial = new DocComercialReclamoBE();
                _Interlocutor = new List<InterlocutorReclamoBE>();
                _Contactos = new ContactosReclamoBE();*/

                //contactos
                if (!(pObjReclamo.Contactos == null))
                {
                    VBKAVB c = new VBKAVB();
                    rec = pObjReclamo.Contactos.VBELN.PadLeft(10, '0');
                    c.Vbeln = pObjReclamo.Contactos.VBELN;
                    c.Erdat = ParametroDALC.dateNetToSap(pObjReclamo.Contactos.ERDAT);
                    c.Erzet = pObjReclamo.Contactos.ERZET;
                    c.Ernam = pObjReclamo.Contactos.ERNAM;
                    c.Aedat = ParametroDALC.dateNetToSap(pObjReclamo.Contactos.AEDAT);
                    c.Aezet = pObjReclamo.Contactos.AEZET;
                    c.Aenam = pObjReclamo.Contactos.AENAM;
                    c.Ktaar = pObjReclamo.Contactos.KTAAR;
                    c.Vbtyp = pObjReclamo.Contactos.VBTYP;
                    c.Trvog = pObjReclamo.Contactos.TRVOG;
                    c.Vkorg = pObjReclamo.Contactos.VKORG;
                    c.Vtweg = pObjReclamo.Contactos.VTWEG;
                    c.Spart = pObjReclamo.Contactos.SPART;
                    c.Vkbur = pObjReclamo.Contactos.VKBUR;
                    c.Vkgrp = pObjReclamo.Contactos.VKGRP;
                    c.Ktabg = ParametroDALC.dateNetToSap(pObjReclamo.Contactos.KTABG);
                    c.Ktaen = ParametroDALC.dateNetToSap(pObjReclamo.Contactos.KTAEN);
                    c.Ktabt = pObjReclamo.Contactos.KTABT;
                    c.Ktaet = pObjReclamo.Contactos.KTAET;
                    c.Ktagr = pObjReclamo.Contactos.KTAGR;
                    c.Ktast = pObjReclamo.Contactos.KTAST;
                    c.Ktaer = pObjReclamo.Contactos.KTAER;
                    c.Ktafk = pObjReclamo.Contactos.KTAFK;
                    c.Ktext = pObjReclamo.Contactos.KTEXT;
                    c.Kunnr = pObjReclamo.Contactos.KUNNR;
                    c.Gbstk = pObjReclamo.Contactos.GBSTK;
                    c.Parvw = pObjReclamo.Contactos.PARVW;
                    c.Direction = pObjReclamo.Contactos.DIRECTION;
                    c.Ktext_Mc = pObjReclamo.Contactos.KTEXT_MC;
                    c.Ktext_Mc_Langu = pObjReclamo.Contactos.KTEXT_MC_LANGU;
                    c.Vgbel = pObjReclamo.Contactos.VGBEL.PadLeft(10, '0');
                    c.Updkz = "U";
                    c.Ktaeb = pObjReclamo.Contactos.KTAEB; 
                    T_Fxvbka.Add(c);

                }
                //Doc Comercial
                if (!(pObjReclamo.DocComercial == null))
                {
                    VBUKVB d = new VBUKVB();
                    d.Gbstk = pObjReclamo.DocComercial.GBSTK;
                    d.Uvall = pObjReclamo.DocComercial.UVALL;
                    d.Vbtyp = pObjReclamo.DocComercial.VBTYP;
                    d.Vbobj = pObjReclamo.DocComercial.VBOBJ;
                    d.Updkz = "U";
                    d.Vbeln = rec;
                    T_Fxvbuk.Add(d);
                }
                //ZWEB_Reclamo
                if (!(pObjReclamo.Z_Reclamo == null))
                {
                    ZWEB_RECLAMOS z = new ZWEB_RECLAMOS();
                    z.Matnr = pObjReclamo.Z_Reclamo.MATNR;
                    z.Matn2 = pObjReclamo.Z_Reclamo.MATNR2;
                    z.Recla = pObjReclamo.Z_Reclamo.RECLA;
                    z.Stat1 = pObjReclamo.Z_Reclamo.STAT1;
                    z.User1 = pObjReclamo.Z_Reclamo.USER1;
                    z.Cmm1 = pObjReclamo.Z_Reclamo.CMM1;
                    z.Stat2 = pObjReclamo.Z_Reclamo.STAT2;
                    z.User2 = pObjReclamo.Z_Reclamo.USER2;
                    z.Cmm2 = pObjReclamo.Z_Reclamo.CMM2;
                    z.Stat3 = pObjReclamo.Z_Reclamo.STAT3;
                    z.User3 = pObjReclamo.Z_Reclamo.USER3;
                    z.Cmm3 = pObjReclamo.Z_Reclamo.CMM3;
                    z.Vbeln = rec;
                    z.Fcha1 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA1);
                    z.Fcha2 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA2);
                    z.Fcha3 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA3);
                    //se adiciono el stat4 con código 9 - rhuapaya
                    z.Stat4 = pObjReclamo.Z_Reclamo.STAT4;
                    z.User4 = pObjReclamo.Z_Reclamo.USER4;
                    z.Cmm4 = pObjReclamo.Z_Reclamo.CMM4;
                    z.Fcha4 = ParametroDALC.dateNetToSap(pObjReclamo.Z_Reclamo.FCHA4);
                    //***************************************************************
                    z.Cpostal = pObjReclamo.Z_Reclamo.CPOSTAL;
                    z.Direccion = pObjReclamo.Z_Reclamo.DIRECCION;
                    z.Nif = pObjReclamo.Z_Reclamo.NIF;
                    z.Pcontacto = pObjReclamo.Z_Reclamo.PCONTACTO;
                    z.Telefono = pObjReclamo.Z_Reclamo.TELEFONO;

                    T_Z_Reclamos.Add(z);
                }
                //Interlocutor 
                foreach (InterlocutorReclamoBE i in pObjReclamo.Interlocutor)
                {
                    VBPAVB it = new VBPAVB();
                    it.Posnr = i.POSNR;
                    it.Parvw = i.PARVW;
                    it.Kunnr = i.KUNNR;
                    it.Pernr = i.PERNR;
                    it.Parnr = i.PARNR;
                    it.Adrnr = i.ADRNR;
                    it.Vbeln = rec;
                    it.Updkz = "U";
                    it.Telfx = i.Telefono;
                    it.Ablad = i.Mail;
                    it.Stceg = i.NIF;

                    //-------------------------------------------
                    
                    T_Fxvbpa.Add(it);
                }
                //verifico que el largo de los textos no sea mayor a 90 caracteres.
                int posSpace = 0;
                string texto = "";
                int contInicio = 0;
                foreach (TextoBE tb in pObjReclamo.Texto)
                {
                    posSpace = 0;
                    contInicio = 0;
                    texto = "";
                    posSpace = (tb.Descripcion.Length / 80);
                    if (posSpace * 80 <= tb.Descripcion.Length) { posSpace++; }
                    posSpace--;
                    if (tb.Descripcion.Length > 130)
                    {
                        for (int cont = 1; cont <= posSpace; cont++)
                        {
                            if (!tb.Descripcion.Substring(cont * 80, 1).Equals("\r\n") &&
                                !tb.Descripcion.Substring(cont * 79, 1).Equals("\r\n"))
                            {
                                tb.Descripcion = tb.Descripcion.Insert(cont * 80, "\r\n");
                            }

                        }
                        
                    }
                }
                foreach (TextoBE tb in pObjReclamo.Texto)
                {
                    //sdfsdfsdfdsf|qqqqqqqqqqqqqqqq|nrrrrrrrrrrrrrrrrr|tttttttttttttt
                    int k = tb.Descripcion.Length;
                    tb.Descripcion = tb.Descripcion.Trim('|');
                    tb.Descripcion = tb.Descripcion.Replace(Environment.NewLine, "|") + "|";
                    if (tb.Descripcion.Length > 0)
                        if (tb.Descripcion.IndexOf("|", 0) > 0)
                            for (int i = 0, j = 0; tb.Descripcion.IndexOf("|", 0) >= 0; )
                            {
                                ZWEB_TEXTOS_RECLAMO t = new ZWEB_TEXTOS_RECLAMO();

                                i = tb.Descripcion.IndexOf("|", j);
                                t.Fid = tb.CodTexto;
                                t.Tdline = tb.Descripcion.Substring(0, i);
                                tb.Descripcion = tb.Descripcion.Substring(i + 1);
                                T_textos.Add(t);
                                i++;
                                //j = i;
                            }
                }


                //
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                //ref VBKAVBTable T_Fxvbka, ref VBPAVBTable T_Fxvbpa, ref VBUKVBTable T_Fxvbuk, ref BAPIRET2Table T_Return, ref ZWEB_RECLAMOSTable T_Z_Reclamos
                proxy.Zweb_Modifica_Reclamo(ref T_Fxvbka, ref  T_Fxvbpa, ref  T_Fxvbuk, ref  T_Return, ref T_textos, ref  T_Z_Reclamos);


                    if (T_Return.Count==0)
                    {
                        rpta.Codigo = "S";
                        rpta.Descripcion = "Reclamo " + pObjReclamo.Z_Reclamo.VBELN + " modificado.";
                  
                    }
                    else
                    {
                        rpta.Codigo = T_Return[0].Type;
                        rpta.Descripcion = T_Return[0].Message;
                    }

            }
            catch (Exception e)
            {
                rpta = new GenericBE();
                rpta.Codigo = "E";
                rpta.Descripcion = "Error ABAP: " + e.Message;
            }

            return rpta;

        }

        public DocReclamoBE getReclamoImpr(string pNroReclamo)
        {

            DocReclamoBE rpta = null;
            try
            {
                //variables
                ReclamosProxy proxy = new ReclamosProxy();

                rpta = new DocReclamoBE();
                BAPIRET2Table T_Return = new BAPIRET2Table();
                ZWEB_TEXTOS_RECLAMOTable T_Textos = new ZWEB_TEXTOS_RECLAMOTable();
                VBKATable T_Vbka = new VBKATable();
                VBPATable T_Vbpa = new VBPATable();
                VBUKTable T_Vbuk = new VBUKTable();
                ZWEB_RECLAMOSTable T_Z_Reclamo = new ZWEB_RECLAMOSTable();
                ZWEB_VISITASTable T_Z_Visitas = new ZWEB_VISITASTable();
                //implementacion

                //
                proxy.Connection = DALC.getConnection;
                try
                {
                    if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
                }
                catch
                {
                    throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
                }
                proxy.Zweb_Ver_Reclamo(pNroReclamo.PadLeft(10, '0'), ref  T_Return, ref  T_Textos, ref  T_Vbka, ref  T_Vbpa, ref  T_Vbuk, ref T_Z_Visitas, ref T_Z_Reclamo);
                //contactos


                if (T_Vbka.Count > 0)
                {   
                    rpta.Contactos.VBELN = T_Vbka[0].Vbeln;
                    rpta.Contactos.ERDAT = ParametroDALC.dateSapToNet(T_Vbka[0].Erdat);
                    rpta.Contactos.ERZET = T_Vbka[0].Erzet.Substring(0, 2) + ":" + T_Vbka[0].Erzet.Substring(2, 2) + ":" + T_Vbka[0].Erzet.Substring(4, 2);
                    rpta.Contactos.ERNAM = T_Vbka[0].Ernam;
                    rpta.Contactos.AEDAT = ParametroDALC.dateSapToNet(T_Vbka[0].Aedat);
                    rpta.Contactos.AEZET = T_Vbka[0].Aezet.Substring(0, 2) + ":" + T_Vbka[0].Aezet.Substring(2, 2) + ":" + T_Vbka[0].Aezet.Substring(4, 2);
                    rpta.Contactos.AENAM = T_Vbka[0].Aenam;
                    rpta.Contactos.KTAAR = T_Vbka[0].Ktaar;
                    rpta.Contactos.KTARA = T_Vbka[0].Ktara;
                    rpta.Contactos.VBTYP = T_Vbka[0].Vbtyp;
                    rpta.Contactos.TRVOG = T_Vbka[0].Trvog;
                    rpta.Contactos.VKORG = T_Vbka[0].Vkorg;
                    rpta.Contactos.VTWEG = T_Vbka[0].Vtweg;
                    rpta.Contactos.SPART = T_Vbka[0].Spart;
                    rpta.Contactos.VKBUR = T_Vbka[0].Vkbur;
                    rpta.Contactos.VKGRP = T_Vbka[0].Vkgrp;
                    rpta.Contactos.KTABG = ParametroDALC.dateSapToNet(T_Vbka[0].Ktabg);
                    rpta.Contactos.KTABT = T_Vbka[0].Ktabt.Substring(0, 2) + ":" + T_Vbka[0].Ktabt.Substring(2, 2) + ":" + T_Vbka[0].Ktabt.Substring(4, 2);
                    rpta.Contactos.KTAET = T_Vbka[0].Ktaet.Substring(0, 2) + ":" + T_Vbka[0].Ktaet.Substring(2, 2) + ":" + T_Vbka[0].Ktaet.Substring(4, 2);
                    rpta.Contactos.KTAGR = T_Vbka[0].Ktagr;
                    rpta.Contactos.KTAST = T_Vbka[0].Ktast;
                    rpta.Contactos.KTAER = T_Vbka[0].Ktaer;
                    rpta.Contactos.KTAFK = T_Vbka[0].Ktafk;
                    rpta.Contactos.KTEXT = T_Vbka[0].Ktext;
                    rpta.Contactos.KUNNR = T_Vbka[0].Kunnr.TrimStart('0');
                    rpta.Contactos.GBSTK = T_Vbka[0].Gbstk;
                    rpta.Contactos.PARVW = T_Vbka[0].Parvw;
                    rpta.Contactos.DIRECTION = T_Vbka[0].Direction;
                    rpta.Contactos.KTEXT_MC = T_Vbka[0].Ktext_Mc;
                    rpta.Contactos.KTEXT_MC_LANGU = T_Vbka[0].Ktext_Mc_Langu;
                    rpta.Contactos.VGBEL = T_Vbka[0].Vgbel.TrimStart('0');
                    rpta.Contactos.KTAEB = T_Vbka[0].Ktaeb;
                }

                //Doc Comercial
                if (T_Vbuk.Count > 0)
                {
                    rpta.DocComercial.GBSTK = T_Vbuk[0].Gbstk;
                    rpta.DocComercial.UVALL = T_Vbuk[0].Uvall;
                    rpta.DocComercial.VBTYP = T_Vbuk[0].Vbtyp;
                    rpta.DocComercial.VBOBJ = T_Vbuk[0].Vbobj;
                    rpta.DocComercial.VBELN = T_Vbuk[0].Vbeln.TrimStart('0');
                }
                //ZWEB_Reclamo
                List< GenericBE> lg = null;
                if (T_Z_Reclamo.Count > 0)
                {
                    rpta.Z_Reclamo.MATNR = T_Z_Reclamo[0].Matnr.TrimStart('0');
                    rpta.Z_Reclamo.MATNR2 = T_Z_Reclamo[0].Matn2.TrimStart('0');
                    rpta.Z_Reclamo.RECLA = T_Z_Reclamo[0].Recla.TrimStart('0');
                    rpta.Z_Reclamo.STAT1 = T_Z_Reclamo[0].Stat1;
                    rpta.Z_Reclamo.USER1 = T_Z_Reclamo[0].User1;
                    rpta.Z_Reclamo.CMM1 = T_Z_Reclamo[0].Cmm1;
                    rpta.Z_Reclamo.STAT2 = T_Z_Reclamo[0].Stat2;
                    rpta.Z_Reclamo.USER2 = T_Z_Reclamo[0].User2;
                    rpta.Z_Reclamo.CMM2 = T_Z_Reclamo[0].Cmm2;
                    rpta.Z_Reclamo.STAT3 = T_Z_Reclamo[0].Stat3;
                    rpta.Z_Reclamo.USER3 = T_Z_Reclamo[0].User3;
                    rpta.Z_Reclamo.CMM3 = T_Z_Reclamo[0].Cmm3;
                    rpta.Z_Reclamo.VBELN = T_Z_Reclamo[0].Vbeln.TrimStart('0');

                    rpta.Z_Reclamo.FCHA1 = ParametroDALC.dateSapToNet(T_Z_Reclamo[0].Fcha1);
                    rpta.Z_Reclamo.FCHA2 = ParametroDALC.dateSapToNet(T_Z_Reclamo[0].Fcha2);
                    rpta.Z_Reclamo.FCHA3 = ParametroDALC.dateSapToNet(T_Z_Reclamo[0].Fcha3);
                    //se adiciono el stat4 con codigo 9 - rhuapaya
                    rpta.Z_Reclamo.STAT4 = T_Z_Reclamo[0].Stat4;
                    rpta.Z_Reclamo.USER4 = T_Z_Reclamo[0].User4;
                    rpta.Z_Reclamo.CMM4 = T_Z_Reclamo[0].Cmm4;
                    rpta.Z_Reclamo.FCHA4 = ParametroDALC.dateSapToNet(T_Z_Reclamo[0].Fcha4);
                    //************************************************************************
                    rpta.Z_Reclamo.CPOSTAL = T_Z_Reclamo[0].Cpostal;
                    rpta.Z_Reclamo.PCONTACTO = T_Z_Reclamo[0].Pcontacto;
                    rpta.Z_Reclamo.NIF = T_Z_Reclamo[0].Nif;
                    rpta.Z_Reclamo.TELEFONO = T_Z_Reclamo[0].Telefono;
                    rpta.Z_Reclamo.DIRECCION = T_Z_Reclamo[0].Direccion;
                  }
                if ((T_Z_Reclamo.Count > 0) && (T_Vbka.Count > 0))
                {
                    lg = getDatosImpr(rpta.Contactos.VGBEL, T_Z_Reclamo[0].Matnr, T_Z_Reclamo[0].Matn2, string.Empty);

                    if (lg.Find(x => x.Codigo.Equals("m1")) != null)
                        rpta.Z_Reclamo.NMATNR = lg.Find(x => x.Codigo.Equals("m1")).Descripcion;

                    if (lg.Find(x => x.Codigo.Equals("m2")) != null)
                        rpta.Z_Reclamo.NMATNR2 = lg.Find(x => x.Codigo.Equals("m2")).Descripcion;

                    if (lg.Find(x => x.Codigo.Equals("p")) != null)
                        rpta.Contactos.KTAEN = ParametroDALC.dateSapToNet(lg.Find(x => x.Codigo.Equals("p")).Descripcion);
                }
                
                //Interlocutor

                string ap = string.Empty;
                string ag = string.Empty;
                bool es = false;
                foreach (VBPA i in T_Vbpa)
                {
                    if (i.Parvw.Equals("AG") && !i.Parvw.Equals(""))
                    {
                        es = ReclamoDALC.Instance().getInterXEmpresa(i.Kunnr, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty).Find(x => x.PARVW.Equals("AG")).EsVentual;
                        if (es)
                            ag = i.Adrnr;
                        else
                            ag = i.Kunnr;
                    }
                    else if (i.Parvw.Equals("AP") && !i.Parvw.Equals(""))
                        ap = i.Parnr;
                }
                List<InterlocutorReclamoBE> lst = null;
                if (es)
                    lst = ReclamoDALC.Instance().getInterXEmpresa(ag, string.Empty, string.Empty, string.Empty, string.Empty, "X");
                else
                    lst = ReclamoDALC.Instance().getInterXEmpresa(ag, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty);

                foreach (VBPA i in T_Vbpa)
                {
                    InterlocutorReclamoBE it = new InterlocutorReclamoBE();
                    InterlocutorReclamoBE inter = null;

                    it.POSNR = i.Posnr;
                    it.PARVW = i.Parvw;
                    it.KUNNR = i.Kunnr;
                    it.PERNR = i.Pernr;
                    it.PARNR = i.Parnr;
                    it.ADRNR = i.Adrnr;
                    it.VBELN = i.Vbeln;
                    if (i.Parvw.Equals("ZM"))
                        it.Cargo = i.Ablad.Equals("") ? (i.Knref.Equals("") ? "" : i.Knref) : i.Ablad;
                    else if (i.Parvw.Equals("AG"))
                        it.Mail = i.Ablad;
                    //otros datos impr
                    inter = lst.Find(x => x.PARVW.Equals(i.Parvw));
                    if( inter!= null)
                    {
                        it.Telefono = inter.Telefono == null ? "" : inter.Telefono;
                        it.Direccion = inter.Direccion== null ? "" : inter.Direccion;
                        //it.Mail = inter.Mail== null ? "" : inter.Mail;
                        it.NOMBRE = inter.NOMBRE== null ? "" : inter.NOMBRE;
                        it.NIF = i.Stceg;
                    }
                  
                    rpta.Interlocutor.Add(it);
                }
                foreach (ZWEB_TEXTOS_RECLAMO tb in T_Textos)
                {
                    TextoBE t = new TextoBE();
                    if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.Fid)) != null)
                    {
                        t = rpta.Texto.Find(x => x.CodTexto.Equals(tb.Fid));
                    }
                    else
                    {
                        t.CodTexto = tb.Fid;
                    }

                    if (!tb.Tdline.Equals(""))
                    {

                        t.Descripcion += tb.Tdline; //"\r\n" + " "
                        t.Descripcion = t.Descripcion.Trim();
                        if (tb.Tdline.Length < 79 && t.Descripcion.IndexOf(".", t.Descripcion.Length - 1) != -1)
                        {
                            t.Descripcion = t.Descripcion + Environment.NewLine;
                        }
                        if (rpta.Texto.Find(x => x.CodTexto.Equals(tb.Fid)) == null)
                        {
                            rpta.Texto.Add(t);
                        }
                    }
                }
                CombosReclamoBE mot = getCombosReclamo();
                GenericBE gen = mot.T_MOTIVO.Find(x => x.Codigo.Equals(rpta.Contactos.KTAGR));
                if (gen != null)
                {
                    rpta.Contactos.KTAGR = gen.Descripcion;
                }

            }
            catch (Exception e)
            {
                rpta = null;
            }

            return rpta;

        }

        public List<ZReclamoVisitasBE> setVisitas(List<ZReclamoVisitasBE> lstVisitas)
        {
            ZWEB_VISITAS zVisitas = new ZWEB_VISITAS();
            ZWEB_VISITASTable t_zVisitas = new ZWEB_VISITASTable();
            List<ZReclamoVisitasBE> lst = new List<ZReclamoVisitasBE>();
            ReclamosProxy proxy = new ReclamosProxy();

            foreach (ZReclamoVisitasBE item in lstVisitas)
            {
                zVisitas = new ZWEB_VISITAS();
                zVisitas.Nrovis = item.NROVIS.PadLeft(10, '0');
                zVisitas.Vbeln = item.VBELN;
                zVisitas.Ktast = item.KTAST;
                zVisitas.Fecha = ParametroDALC.dateNetToSap(item.FECHA);
                zVisitas.Hora = item.TIME;
                zVisitas.Resp = item.RESP;
                zVisitas.Coment = item.COMENT;

                t_zVisitas.Add(zVisitas);
            }

            proxy.Connection = DALC.getConnection;
            try
            {
                if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            }
            catch
            {
                throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
            }

            proxy.Zweb_Guardar_Visitas(ref t_zVisitas);

            foreach (ZWEB_VISITAS item in t_zVisitas)
            {
                ZReclamoVisitasBE objVisitas = new ZReclamoVisitasBE();
                objVisitas.NROVIS = item.Nrovis;
                objVisitas.VBELN = item.Vbeln;
                objVisitas.KTAST = item.Ktast;
                objVisitas.FECHA = ParametroDALC.dateSapToNet(item.Fecha);
                objVisitas.TIME = item.Hora.Substring(0, 2) + ":" + item.Hora.Substring(2, 2);
                objVisitas.RESP = item.Resp;
                objVisitas.COMENT = item.Coment;

                lst.Add(objVisitas);
            }

            return lst;
        }

        //private List<ZReclamoVisitasBE> ListaVisitasPorReclamo(string nroReclamo)
        //{
        //    ZWEB_VISITAS zVisitas = new ZWEB_VISITAS();
        //    ZWEB_VISITASTable t_zVisitas = new ZWEB_VISITASTable();
        //    List<ZReclamoVisitasBE> lst = new List<ZReclamoVisitasBE>();
        //    ReclamosProxy proxy = new ReclamosProxy();

        //    proxy.Connection = DALC.getConnection;
        //    try
        //    {
        //        if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
        //    }
        //    catch
        //    {
        //        throw new Exception(ParametroDALC.getParamValueStatic("msgConnError"));
        //    }

        //    proxy.Zweb_Busca_Visitas(nroReclamo, ref t_zVisitas);

        //    foreach (ZWEB_VISITAS item in t_zVisitas)
        //    {
        //        ZReclamoVisitasBE objVisitas = new ZReclamoVisitasBE();
        //        objVisitas.NROVIS = item.Nrovis;
        //        objVisitas.VBELN = item.Vbeln;
        //        objVisitas.KTAST = item.Ktast;
        //        objVisitas.FECHA = ParametroDALC.dateSapToNet(item.Fecha);
        //        objVisitas.TIME = item.Hora.Substring(0, 2) + ":" + item.Hora.Substring(2, 2);
        //        objVisitas.RESP = item.Resp;
        //        objVisitas.COMENT = item.Coment;

        //        lst.Add(objVisitas);
        //    }

        //    return lst;
        //}
    }
}
